package com.reliable.service.serviceimpl;

import com.reliable.api.dto.largescreen.*;
import com.reliable.common.annotation.DataSource;
import com.reliable.common.enums.DataSourceType;
import com.reliable.service.mapper.LargeScreenMapper;
import com.reliable.service.service.ILargeScreenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * 首页大屏KPI数据统计 服务实现层
 */
@Service
@DataSource(value = DataSourceType.MASTER)
public class LargeScreenServiceImpl implements ILargeScreenService {

    @Autowired
    private LargeScreenMapper largeScreenMapper;

    /**
     * 获取首页KPI数据展示
     * 包括今日/本周/本月的高风险会话和可疑交易统计数据
     *
     * @return KPI统计数据
     */
    @Override
    public LargeScreenKpiData getKpiData() {
        return largeScreenMapper.getKpiData();
    }

    /**
     * 获取高风险会话日增量趋势数据
     *
     * @return 趋势数据列表
     */
    @Override
    public List<RiskTrendData> getHighRiskSessionTrendData() {
        return largeScreenMapper.getHighRiskSessionTrendData();
    }

    /**
     * 获取可疑交易日新增趋势数据
     *
     * @return 趋势数据列表
     */
    @Override
    public List<RiskTrendData> getSuspectTransactionTrendData() {
        return largeScreenMapper.getSuspectTransactionTrendData();
    }

    /**
     * 获取可疑收款账户类型分布数据
     *
     * @return 收款类型分布数据列表
     */
    @Override
    public List<CollectionTypeData> getCollectionTypeData() {
        return largeScreenMapper.getCollectionTypeData();
    }

    /**
     * 获取高风险会话的敏感词触发占比数据
     *
     * @return 敏感词触发占比数据
     */
    @Override
    public KeywordRiskData getKeywordRiskData() {
        return largeScreenMapper.getKeywordRiskData();
    }

    /**
     * 获取交易成功率与失败率数据
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 交易成功率与失败率数据
     */
    @Override
    public TransactionSuccessData getTransactionSuccessData(Date startTime, Date endTime) {
        return largeScreenMapper.getTransactionSuccessData(startTime, endTime);
    }

    /**
     * 获取最近事件数据
     *
     * @return 事件数据列表
     */
    @Override
    public List<EventData> getRecentEvents() {
        return largeScreenMapper.getRecentEvents();
    }

    /**
     * 获取今日数据统计
     *
     * @return 今日数据统计
     */
    @Override
    public TodayData getTodayData() {
        return largeScreenMapper.getTodayData();
    }

    /**
     * 获取已提取交易数量
     *
     * @return 已提取交易数量
     */
    @Override
    public Integer getExtractedTransactions() {
        return largeScreenMapper.getExtractedTransactions();
    }

    /**
     * 获取总量数据统计
     *
     * @param totalMessages 总对话数量
     * @param totalSessions 总会话数量
     * @param analyzedSessions 已分析会话数量
     * @return 总量数据统计
     */
    @Override
    public TotalData getTotalData(Integer totalMessages, Integer totalSessions, Integer analyzedSessions) {
        TotalData totalData = new TotalData();
        totalData.setTotalMessages(totalMessages);
        totalData.setTotalSessions(totalSessions);
        totalData.setAnalyzedSessions(analyzedSessions);
        totalData.setExtractedTransactions(this.getExtractedTransactions());
        return totalData;
    }
}